package com.example.controller;

// 导入必要的包和类
import com.example.common.Result; // 通用响应结果类
import com.example.entity.Person; // 实体类，表示人
import com.example.service.PersonService; // 服务类，用于业务逻辑处理
import com.github.pagehelper.PageInfo; // 分页插件的结果类
import jakarta.annotation.Resource; // 用于注入依赖
import org.springframework.web.bind.annotation.*; // Spring MVC相关注解

import java.util.List; // 列表接口

/*
 * 管理员前端操作接口，负责处理与Person相关的HTTP请求。
 */
@RestController // 标识这是一个控制器类，返回的数据直接写入HTTP响应体（通常是JSON格式）
@RequestMapping("/person") // 设置该控制器的基础路径为/person
public class PersonController {

    // 使用@Resource注解自动注入PersonService，用于调用业务逻辑
    @Resource
    private PersonService personService;

    /**
     * 新增人员信息
     */
    @PostMapping("/add") // 处理POST请求，路径为/person/add
    public Result add(@RequestBody Person person) { // 接收JSON格式的人员信息
        personService.add(person); // 调用服务层方法保存人员信息
        return Result.success(); // 返回操作成功的通用结果
    }

    /*
     * 根据ID删除人员信息
     */
    @DeleteMapping("/delete/{id}") // 处理DELETE请求，路径为/person/delete/{id}
    public Result deleteById(@PathVariable Integer id) { // 从路径中获取ID
        personService.deleteById(id); // 调用服务层方法删除指定ID的人员信息
        return Result.success(); // 返回操作成功的通用结果
    }
    /*
     * 根据ID修改人员信息
     */
    @PutMapping("/update") // 处理PUT请求，路径为/person/update
    public Result updateById(@RequestBody Person person) { // 接收JSON格式的人员信息，包含要修改的ID
        personService.updateById(person); // 调用服务层方法更新人员信息
        return Result.success(); // 返回操作成功的通用结果
    }

    /*
     * 根据ID查询人员信息
     */
    @GetMapping("/selectById/{id}") // 处理GET请求，路径为/person/selectById/{id}
    public Result selectById(@PathVariable Integer id) { // 从路径中获取ID
        Person person = personService.selectById(id); // 调用服务层方法查询指定ID的人员信息
        return Result.success(person); // 返回查询结果和成功状态
    }

    /*
     * 根据ID查询人员信息（参数形式）
     */
    @GetMapping("/selectOne") // 处理GET请求，路径为/person/selectOne
    public Result selectOne(@RequestParam Integer id) { // 从请求参数中获取ID
        Person person = personService.selectById(id); // 调用服务层方法查询指定ID的人员信息
        return Result.success(person); // 返回查询结果和成功状态
    }

    /*
     * 查询所有人员信息
     */
    @GetMapping("/selectAll") // 处理GET请求，路径为/person/selectAll
    public Result selectAll(Person person) { // 可选地接收一个Person对象作为查询条件（尽管未使用）
        List<Person> list = personService.selectAll(person); // 调用服务层方法查询所有人员信息
        return Result.success(list); // 返回查询结果和成功状态
    }

    /**
     * 分页查询人员信息
     */
    @GetMapping("/selectPage") // 处理GET请求，路径为/person/selectPage
    public Result selectPage(Person person, // 可选地接收一个Person对象作为查询条件
                             @RequestParam(defaultValue = "1") Integer pageNum, // 从请求参数中获取当前页码，默认为1
                             @RequestParam(defaultValue = "10") Integer pageSize) { // 从请求参数中获取每页显示的记录数，默认为10
        PageInfo<Person> page = personService.selectPage(person, pageNum, pageSize); // 调用服务层方法进行分页查询
        return Result.success(page); // 返回分页查询结果和成功状态
    }
}